package rpcdemo

import (
	"context"
	"gitee.com/851537/gbase"
	rpcbase "gitee.com/851537/gpkg/rpc/base"
	"github.com/pkg/errors"
	"github.com/smallnest/rpcx/protocol"
)

type UserService struct{}

type AliveReq struct {
	gbase.Base
	Name string `json:"name" vd:"isnull($);msg:'必须指定名称'"`
	Age  int    `json:"age" vd:"$>0;msg:'必须指定年龄'"`
}

// 客户端req参数如果使用gbase.Map时，字段名必须与本req保持一致，即这里Age字段，在客户端参数是gbase.Map{"Age":10}
func (this *UserService) Alive(ctx context.Context, req *AliveReq, resp *gbase.Resp) (err error) {
	//if err = req.Vd(req); err != nil {
	//	return err
	//}
	//resp的原地址不能改，只能对resp成员赋值，不能对整个resp重新创建新对象
	resp.WithCode(200).WithMsg("ok").WithData(true)
	return nil
}

// 自定义权限验证方法
func Auth(ctx context.Context, req *protocol.Message, tokenStr string) (err error) {
	token := rpcbase.NewToken()
	if err = token.FromX(token, tokenStr); err != nil {
		return err
	} else if !token.CheckMd5("123456") {
		return errors.New("rpc token invalid")
	}
	return nil
}
